package 集合.List_test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

class Person{
    private String name;
    private int  age;
    Person(String name,int age){
        this.name=name;
        this.age=age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class ArrayListTest {
    public static void main(String[] args) {
        Person person1 = new Person("小明", 2);
        Person person2 = new Person("小红", 2);
        ArrayList<Integer> listNode = new ArrayList<>();

//        ArrayList<ArrayList<Integer>> list = testNesting(person1, person2, listNode);
//        testAddress(listNode,person1,person2,list);
        testE(person1);

    }

    /**
     * 测试ArrayList泛型
     */
    private static void testE(Person person) {
        List<Object> list3 = new ArrayList<>();//泛型为Object时候，元素可以是多种数据类型
        list3.add(1);
        list3.add("String");
        list3.add('c');

        //任何数据类型均可以
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(2023);
        list3.add(arrayList);
        list3.add(person);
        System.out.println(list3);
    }

    /*
     * 集合中的集合 之 内部集合的变更问题
     */
    private static void testAddress(ArrayList<Integer> listNode, Person person1, Person person2 , ArrayList<ArrayList<Integer>> list) {
        listNode.clear();
//        listNode.remove(0);
//        System.out.println(list);//两个都会重新更改list中的内容

        ArrayList<Person> list2 = new ArrayList<>();
        list2.add(person1);
        list2.add(person2);
//        person1=null;
//        person1.setAge(100);
        person1=person2;
        list2.get(1).setAge(100);
        System.out.println(person1);
        System.out.println(list2.toString()); //由此可见，Java中的引用是引用地址（并不是句柄）
    }

    /**
     * 集合中嵌套集合
     * @param person1
     * @param person2
     * @param listNode
     * @return
     */
    static ArrayList<ArrayList<Integer>> testNesting(Person person1 , Person person2 , ArrayList<Integer> listNode){
        //嵌套集合
        ArrayList<ArrayList<Integer>>  list= new ArrayList<>();
        ArrayList<Integer> listNode2 = new ArrayList<>();
        int start = 11;
        int end=22;
        listNode.add(start);
        listNode.add(end);
        listNode2.addAll(listNode);
        list.add(listNode);
        list.add(listNode2);
        System.out.println(list);
        return list;
    }
}
